#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void *task(void *arg)
{
    printf("task 线程开始执行\n");
    // 模拟工作
    printf("task 线程执行中\n");
    sleep(3);
    // 如果被main线程取消了，就不会执行
    printf("task sleep之后执行\n");

    return NULL;
}

int main()
{
    pthread_t tid;
    // 创建线程
    pthread_create(&tid, NULL, task, NULL);
    // 主程序休眠1秒，让子线程先执行
    sleep(1);
    // 取消子线程
    pthread_cancel(tid);
    // 等待子线程结束并获取其返回值
    void *ret;
    pthread_join(tid, &ret);

    // 判断子线程是否被取消
    if (ret == PTHREAD_CANCELED)
    {
        printf("task子线程被取消\n");
    }
    else
    {
        printf("task子线程正常结束\n");
    }
    return 0;
}